package cn.gd.mapper.systemAdministration.Organizations;

import cn.gd.logging.RecordLog;
import cn.gd.pojo.Department;
import cn.gd.pojo.Organizationstructure;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import javax.xml.crypto.Data;
import java.util.List;

@Mapper
public interface OrganizationsMapper {
    /**
     * 获取组织结构和部门名称
     *
     * @return
     */
    @RecordLog(desc = "获取组织结构和部门名称")
    List<Organizationstructure> getAllOrganizations();

    /**
     * 根据ID获取部门
     *
     * @param id
     * @return
     */
    @RecordLog(desc = "根据ID获取部门")
    Department getDepartmentById(@Param("id") Integer id);

    /**
     * 根据组织结构ID或部门ID获取组织结构名
     * @param deptId
     * @param orgId
     * @return
     */
    @RecordLog(desc = "根据组织结构ID或部门ID获取组织结构名")
    Organizationstructure getOrganizationStructureNameById(@Param("deptId") Integer deptId,@Param("orgId") Integer orgId);

    /**
     * 根据ID修改部门信息
     *
     * @param department
     * @return
     */
    @RecordLog(desc = "根据ID修改部门信息")
    int updateDepartmentById(Department department);

    /**
     * 根据部门ID删除部门信息
     *
     * @param id
     * @return
     */
    @RecordLog(desc = "根据部门ID删除部门信息")
    int deleteDepartmentById(@Param("id") Integer id);

    /**
     * 根据部门ID删除组织结构与部门表的关联信息
     *
     * @param deptID
     * @return
     */
    @RecordLog(desc = "根据部门ID删除组织结构与部门表的关联信息")
    int deleteDepartmentHierarchyByDeptID(@Param("deptID") Integer deptID);

    /**
     * 根据组织结构ID获取组织结构信息
     *
     * @param orgId
     * @return
     */
    @RecordLog(desc = "根据组织结构ID获取组织结构信息")
    Organizationstructure getOrganizationstructureByOrgId(@Param("orgId") Integer orgId);

    /**
     * 根据组织结构ID修改组织信息
     *
     * @param organizationstructure
     * @return
     */
    @RecordLog(desc = "根据组织结构ID修改组织信息")
    int updateOrganizationStructureByOrgId(Organizationstructure organizationstructure);

    /**
     * 根据排序查询是否有组织结构
     * @param sortOrder
     * @return
     */
    @RecordLog(desc = "根据排序查询是否有组织结构")
    int queryOrganizationStructureBySortOrder(@Param("sortOrder") Integer sortOrder);

    /**
     * 根据更改的排序，目标排序及后面所有排序加一
     *
     * @param sortOrder
     * @return
     */
    @RecordLog(desc = "根据更改的排序，目标排序及后面所有排序加一")
    int AllOfSortOrderPlusOneBySortOrder(@Param("sortOrder") Integer sortOrder);

    /**
     * 新增部门信息
     *
     * @param department
     * @return
     */
    @RecordLog(desc = "新增部门信息")
    int addDepartment(Department department);

    /**
     * 新增组织结构和部门关系表
     *
     * @param orgId
     * @return
     */
    @RecordLog(desc = "新增组织结构和部门关系表")
    int addDepartmentHierarchy(@Param("orgId") Integer orgId, @Param("deptId") Integer deptId);

    /**
     * 删除组织结构信息根据组织ID
     * @param orgId
     * @return
     */
    @RecordLog(desc = "删除组织结构信息根据组织ID")
    int deleteOrganizationStructureByOrgId(@Param("orgId") Integer orgId);

    /**
     * 根据组织ID获取排序
     * @param orgId
     * @return
     */
    @RecordLog(desc = "根据组织ID获取排序")
    int querySortOrderByOrgId(@Param("orgId") Integer orgId);

    /**
     * 大于指定排序的都减一
     * @param sortOrder
     * @return
     */
    @RecordLog(desc = "大于指定排序的都减一")
    int AllOfSortOrderMinusOneBySortOrder(@Param("sortOrder") Integer sortOrder);

    /**
     * 根据组织结构ID删除组织结构与部门关联数据
     * @param orgId
     * @return
     */
    @RecordLog(desc = "根据组织结构ID删除组织结构与部门关联数据")
    int deleteDepartmentHierarchyByOrgId(@Param("orgId") Integer orgId);

    /**
     * 新增组织结构
     * @param organizationstructure
     * @return
     */
    @RecordLog(desc = "新增组织结构")
    int addOrganizationStructure(Organizationstructure organizationstructure);
}
